package demo3;

/*
给定一个字符串，请你找出其中不含有重复字符的 最长子串 的长度。
 */

public class Test {

    public static void main(String[] args) {
        String s = "abcabcbb";

        lengthOfLongestSubstring(s);

    }


    public static int lengthOfLongestSubstring(String s) {
        //定义一个可变长度字符串，用来保存当前的子串
        StringBuffer sb = new StringBuffer();
        //定义子串最大长度
        int max = 0;

        if(s.length() == 0 || s.length() == 1){
            return s.length();
        }
        max = 1;

        //给可变长度字符串存进第一个字符
        sb.append(s.charAt(0));

        for (int i = 1; i < s.length(); i++) {
            //遍历原串
            //判断当前指向原串的字符位置，在sb（子串）中是否有重复
            if(sb.indexOf(""+s.charAt(i)) != -1){
                //出现了重复
                //将可变长度的串，重复的那个字符位置为起点start，直到结尾end，裁剪字符串
                //substring(start,end)的范围是[start,end)，我们要的范围是(start,end]
//                System.out.println("sb="+sb+" i="+i+" sb.indexOf(s.charAt(i)+\"\")="+sb.indexOf(s.charAt(i)+""));
                sb= new StringBuffer((sb.substring(sb.indexOf(s.charAt(i)+""))+1));
                //补充重复的那个字符进字符串末尾
                sb.append(s.charAt(i));

            }else{
                //没出现重复，给子串添加进去
                sb.append(""+s.charAt(i));
                //如果子串超过当前统计的最大长度，则对最大值进行更新
                if(max < sb.length()){
                    max = sb.length();
                    System.out.println(sb+" 长度为："+max);
                }
            }
        }
        return max;
    }


}




